íë°ížìë ì±ë¥ ìµì ë² APIë¡ ì¬ì©ì ì§ì íìëŒìžì íì©íì¬ ì¹ ì± ì¬ì©ì 겜íì ëí ì¬ìžµ íµì°°ë ¥ì ì»ìŒìžì. êžë¡ë² ì¬ì©ì륌 ìí ì í늬ìŒìŽì ë³ ì§í륌 ì ìíê³ ì¶ì íë ë°©ë²ì ë°°ì°ìžì.
íë°ížìë ì±ë¥ ìµì ë²: êžë¡ë² ìí¥ë ¥ì ìí ì í늬ìŒìŽì ë³ ì§í ì€ê³
ì€ëë 겜ììŽ ì¹ìŽí ëì§íž í겜ìì íìí íë°ížìë ì±ë¥ì ëšìí êž°ë¥ìŽ ìëëŒ íì ììì ëë€. ì ìžê³ ì¬ì©ìë ì¹ ì í늬ìŒìŽì ìì ë²ê°ì²ëŒ ë¹ ë¥Žê³ ë°ìì±ìŽ ë°ìŽëë©° ìíí ìíž ìì©ì êž°ëí©ëë€. ë¡ë ìê°(Load Time) ë° ìíž ìì©ê¹ì§ì ìê°(Time to Interactive)곌 ê°ì íì€ ì±ë¥ ì§íë ê·ì€í íµì°°ë ¥ì ì ê³µíì§ë§, í¹í ë³µì¡íê³ ì í늬ìŒìŽì ë³ ì¬ì©ì ì¬ì ììë ë¶ìì í 귞늌ì 귞늬ë 겜ì°ê° ë§ìµëë€. ë°ë¡ ìŽ ì§ì ìì íë°ížìë ì±ë¥ ìµì ë² API, í¹í ì¬ì©ì ì§ì íìëŒìžì ìì±íë êž°ë¥ì ì§ì í ì í늬ìŒìŽì ë³ ì§í ì¶ì ì ë¬ì±íê³ êžë¡ë² ì¬ì©ììê² ì°ìí ì¬ì©ì 겜íì ì ê³µíë €ë ê°ë°ììê² ììŽìë ì ë ëêµ¬ê° ë©ëë€.
íì€ ì§íì íê³ ìŽíŽ
ì¬ì©ì ì§ì íìëŒìžì ììží ìŽíŽë³Žêž° ì ì, Ʞ볞 ì ê³µëë ì±ë¥ ì§íìë§ ì졎íë ê²ìŽ ì ë¶ì¶©ë¶í ì ìëì§ ìŽíŽíë ê²ìŽ ì€ìí©ëë€. ëžëŒì°ì ê°ë°ì ë구ë íì¬ ëªšëí°ë§ ìë¹ì€ìì ì ê³µíë ê²ê³Œ ê°ì íì€ ì§íë ìŒë°ì ìŒë¡ íìŽì§ì ìŽêž° ë¡ë©ì ì€ì ì ë¡ëë€. ìŽë ì€ìíì§ë§, ìŽë¬í ì§íë íìŽì§ê° ë¡ëë í ë°ìíë ì€ìí ìíž ìì©ì í¬ì°©íì§ ëª»í ì ììµëë€.
ë€ì ìë늬ì€ë¥Œ ê³ ë €íŽ ë³Žìžì:
- ìŒë³ž ëì¿ì í ì¬ì©ìê° ì ììê±°ë ì¬ìŽížìì ë³µì¡í ë€ëšê³ ê²°ì íë¡ìžì€ë¥Œ ìë£íê³ ììµëë€. íì€ ë¡ë ìê° ì§íë ëšê³ ê° ì íìŽ ë늬거ë ì¥ë°êµ¬ëì í목ì ì¶ê°íë ë° ì§ì°ìŽ ìëì§ ì¬ë¶ë¥Œ ëíëŽì§ ììµëë€.
- ìŒë ëìŽë¡ë¹ì í íììŽ ì€ìê° ìšëŒìž íìµ ìžì ì ì°žì¬íê³ ììµëë€. ìŽêž° íìŽì§ ë¡ëì ì€ì ì ë ì§íë ìžì ì€ ë²íŒë§ 묞ì ë ì€ìê° ìœí ìž íì ì§ì°ì ìë³íì§ ëª»í©ëë€.
- ìêµ ë°ëì í êžìµ ë¶ìê°ê° ëì ëì볎ëì ìíž ìì©íê³ ììµëë€. ìŽêž° ë¡ë ìê°ì 묎êŽíë©°, ë°ìŽí° ì ë°ìŽíž ë° ì°šíž ë ëë§ ì±ë¥ìŽ ê°ì¥ ì€ìí©ëë€.
ìŽ ììë€ì íìŽì§ ë¡ë ìì ë¿ë§ ìëëŒ ì¬ì©ìì ì í늬ìŒìŽì 곌ì ì 첎 ìíž ìì© ëì ì±ë¥ì ìž¡ì íŽìŒ í íìì±ì ê°ì¡°í©ëë€. ìŽê²ìŽ ë°ë¡ íë°ížìë ì±ë¥ ìµì ë² APIê° íŽê²°íëë¡ ì€ê³ë 묞ì ì ëë€.
íë°ížìë ì±ë¥ ìµì ë² API ìê°
Performance Observer APIë ê°ë°ìê° ì¹ íìŽì§ ëŽìì ì±ë¥ êŽë š ìŽë²€ížë¥Œ 몚ëí°ë§íê³ êž°ë¡í ì ìëë¡ íë ê°ë ¥í ëžëŒì°ì ë€ìŽí°ëž JavaScript APIì ëë€. ìŽ APIë íì íìŽë°, 늬ìì€ ë¡ë©, íë ìë³ ë ëë§ ì 볎륌 í¬íší ë€ìí ì±ë¥ í목ì ëí ì¡ìžì€ë¥Œ ì ê³µí©ëë€. ê²°ì ì ìŒë¡ ì±ë¥ ë§í¬(Performance Mark) ë° ì±ë¥ ìž¡ì (Performance Measure) í목ì ìì±í ì ìê² íŽì£Œë©°, ìŽë€ì ì¬ì©ì ì§ì íìëŒìžì êµ¬ì± ììì ëë€.
ì±ë¥ ë§í¬: 죌ì ìê° í¬ì°©
ì±ë¥ ë§í¬ë 볞ì§ì ìŒë¡ ì í늬ìŒìŽì ì í¹ì ìŽë²€ížì ëí íìì€í¬íì ëë€. ìŽë ì¬ì©ì ìíž ìì© ì€ ì€ìí ìì ì íìíë ë°©ë²ì ëë€. ë€ì곌 ê°ìŽ ì€ìíë€ê³ ìê°íë 몚ë ê²ì ëíŽ ë§í¬ë¥Œ ìì±í ì ììµëë€.
- ì¬ì©ìê° ê²ìì ììíë ìê°.
- ë°ìŽí° ê°ì žì€êž° ìì² ìë£.
- í¹ì UI êµ¬ì± ììì ë ëë§.
- ì¬ì©ìê° 'ì ì¶' ë²íŒì íŽëŠíë ê².
ë§í¬ ìì± êµ¬ë¬žì ê°ëší©ëë€:
performance.mark('myCustomStartMark');
ì±ë¥ ìž¡ì : ì§ì ìê° ì ëí
ë°ë©Žì ì±ë¥ ìž¡ì ì ë ìì ì¬ìŽì ì§ì ìê°ì êž°ë¡í©ëë€. ìŽ ìì ì ë ê°ì ì±ë¥ ë§í¬, ë§í¬ì íì¬ ìê°, ëë íì ìì곌 ë§í¬ê° ë ì ììµëë€. ì±ë¥ ìž¡ì ì í¹ì ìì ëë ì¬ì©ì ìíž ìì©ì 걞늬ë ìê°ì ì ëíí ì ìê² íŽì€ëë€.
ì륌 ë€ìŽ, 'ê²ì ìì' ë§í¬ì 'ê²ì 결곌 íì' ë§í¬ ì¬ìŽì ìê°ì ìž¡ì í ì ììµëë€:
performance.mark('searchInitiated');
// ... perform search operation ...
performance.mark('searchResultsDisplayed');
performance.measure('searchDuration', 'searchInitiated', 'searchResultsDisplayed');
ì í늬ìŒìŽì ë³ ì§í륌 ìí ì¬ì©ì ì§ì íìëŒìž 구ì¶
ì±ë¥ ë§í¬ì ìž¡ì ì ì ëµì ìŒë¡ ê²°í©íì¬ ì í늬ìŒìŽì ì ê³ ì í ì¬ì©ì íëŠê³Œ ì€ìí ìì ì ë°ìíë ì¬ì©ì ì§ì íìëŒìžì 구ì¶í ì ììµëë€. ìŽë¥Œ íµíŽ ìŒë°ì ìž ë¡ë ìê°ì ëìŽ ì¬ì©ìì ìì¹ë 컚í ì€ížì êŽê³ììŽ ì¬ì©ììê² ì§ì ìŒë¡ ì€ìí ê²ì ìž¡ì í ì ììµëë€.
죌ì ì í늬ìŒìŽì ë³ ì§í ìë³
íšê³Œì ìž ì¬ì©ì ì§ì íìëŒìžì ìì±íë 첫 ë²ì§ž ëšê³ë ì í늬ìŒìŽì ì ê°ì¥ ì€ìí ì¬ì©ì ì¬ì 곌 ìì ì ìë³íë ê²ì ëë€. ì í늬ìŒìŽì ì ê°ì¹ ì ìì ì ìíë íµì¬ êž°ë¥ì ìê°íŽ ë³Žìžì. êžë¡ë² ì ììê±°ë íë«íŒì ê²œì° ë€ììŽ í¬íšë ì ììµëë€.
- ì í ê²ì ì±ë¥: ê²ì 쿌늬 ì ì¶ë¶í° 결곌 íìê¹ì§ì ìê°.
- ì¥ë°êµ¬ë ì¶ê° ì§ì° ìê°: 'ì¥ë°êµ¬ëì ì¶ê°' íŽëŠë¶í° íìžê¹ì§ì ìê°.
- ê²°ì íëŠ ì§ì ìê°: ì 첎 ê²°ì íë¡ìžì€ë¥Œ ìë£íë ë° ê±žëŠ¬ë ìŽ ìê°.
- ê°€ë¬ëЬ ìŽë¯žì§ ë¡ë©: í¹í ê³ ëìí ëë ì ëìí ì°ê²°ìì ìŽë¯žì§ ìºë¬ì ëë ê°€ë¬ëЬ ì±ë¥.
ì€ìê° íì ì ì¬ì©ëë êžë¡ë² SaaS ì í늬ìŒìŽì ì ê²œì° ì£Œì ì§íë ë€ì곌 ê°ìµëë€.
- ì€ìê° ë©ìì§ ì ë¬: ë©ìì§ê° ë€ë¥ž ì°žê°ììê² ëíëë ìê°.
- 묞ì ëêž°í ì§ì° ìê°: ê³µì 묞ìì ë³ê²œ ì¬íìŽ ëªšë ì¬ì©ììê² ì íëë ìê°.
- ë¹ëì€/ì€ëì€ ì€ížëŠŒ íì§: PerformanceObserverìì ì§ì ìž¡ì ëì§ë ìì§ë§, ì°ê²° ì€ì ë° ë²íŒë§ê³Œ ê°ì êŽë š ìì ì 몚ëí°ë§í ì ììµëë€.
ì ìžê³ ë ì륌 ëììŒë¡ íë ìœí ìž ì€ì¬ ëŽì€ í¬ížì 겜ì°:
- êž°ì¬ ë ëë§ ìê°: ë§í¬ íŽëŠë¶í° ì 첎 êž°ì¬ ìœí ìž ê° íìëê³ ìíž ìì© ê°ë¥íŽì§ ëê¹ì§ì ìê°.
- êŽê³ ë¡ë© ì±ë¥: êŽê³ ê° íµì¬ ìœí ìž ë¥Œ ì°šëšíì§ ìê³ íì© ê°ë¥í ìê³ê° ëŽìì ë¡ëëëë¡ ë³Žì¥.
- 묎í ì€í¬ë¡€ ì±ë¥: ì¬ì©ìê° ì€í¬ë¡€í ë ë ë§ì ìœí ìž ë¥Œ ë¡ëí ëì ë¶ëë¬ì곌 ë°ìì±.
ì¬ì©ì ì§ì íìëŒìž 구í: ì€ì ìì
êžë¡ë² ì ììê±°ë ì¬ìŽížìì ëì ê²ì êž°ë¥ì ì±ë¥ì ì¶ì íë ìì륌 ë€ìŽ ì€ëª íŽ ë³Žê² ìµëë€. ì¬ì©ìê° ê²ì ììì 묞ì륌 ì ë ¥íë ìì ë¶í° ì ìë ê²ì ê²°ê³Œê° ëíëë ìì ê¹ì§ì ìê°ì ìž¡ì íë €ê³ í©ëë€.
1ëšê³: ì ë ¥ ìŽë²€ížë¥Œ ë§í¬í©ëë€.
ê²ì ì ë ¥ íëì ìŽë²€íž 늬ì€ë륌 ì¶ê°í©ëë€. ê°ëšíê² ì€ëª íêž° ìíŽ ê° ì ë ¥ ìŽë²€ížì ë§í¬ë¥Œ ížëŠ¬ê±°íì§ë§, ì€ì ìë늬ì€ììë 곌ëí ë§í¬ë¥Œ íŒíêž° ìíŽ ëë°ìŽì±í ê°ë¥ì±ìŽ ëìµëë€.
const searchInput = document.getElementById('search-box');
searchInput.addEventListener('input', (event) => {
performance.mark('search_input_typed');
});
2ëšê³: ê²ì ì ì íì륌 ë§í¬í©ëë€.
ê²ì ê²°ê³Œê° ê°ì žìì ž ëë¡ë€ìŽìŽë 목ë¡ì ë ëë§ë멎 ë€ë¥ž ë§í¬ë¥Œ ì¶ê°í©ëë€.
function displaySearchResults(results) {
// ... logic to render results ...
performance.mark('search_suggestions_displayed');
}
// When your search API returns data and you update the DOM:
// fetch('/api/search?q=' + searchTerm)
// .then(response => response.json())
// .then(data => {
// displaySearchResults(data);
// });
3ëšê³: ì§ì ìê°ì ìž¡ì íê³ ì¬ì©ì ì§ì ì§í륌 êž°ë¡í©ëë€.
ìŽì ìŽ ë ìŽë²€íž ì¬ìŽì ìê°ì í¬ì°©íë ìž¡ì ì ìì±í ì ììµëë€. ìŽ ìž¡ì ì ì°ëЬì ì í늬ìŒìŽì ë³ ì§íê° ë ê²ì ëë€.
// A common pattern is to measure the last 'search_input_typed' to the 'search_suggestions_displayed'
// This might require some careful state management if multiple inputs happen rapidly.
// For demonstration, we'll assume a simplified scenario.
// A more robust approach might involve creating a unique ID for each search request
// and associating marks and measures with that ID.
// Let's assume we have a way to get the last typed mark.
// In a real app, you might store the last mark's name or timestamp.
const lastInputMarkName = 'search_input_typed'; // Simplified
performance.addEventListener('mark', (event) => {
if (event.detail.name === 'search_suggestions_displayed') {
// Find the most recent 'search_input_typed' mark
const inputMarks = performance.getEntriesByName(lastInputMarkName, 'mark');
if (inputMarks.length > 0) {
const lastInputMark = inputMarks[inputMarks.length - 1];
const suggestionDisplayedMark = event.detail;
// Create a unique name for this measure to avoid overwrites
const measureName = `search_suggestion_latency_${Date.now()}`;
performance.measure(measureName, lastInputMark.name, suggestionDisplayedMark.name);
console.log(`Custom Metric: ${measureName} - ${performance.getEntriesByName(measureName)[0].duration}ms`);
// Now you can send this 'duration' to your analytics/performance monitoring service.
}
}
});
4ëšê³: ë³Žê³ ë° ë¶ì.
The `performance.measure()` function creates a PerformanceEntry object that you can retrieve using `performance.getEntriesByName('your_measure_name')` or `performance.getEntriesByType('measure')`. This data can then be sent to your backend analytics or performance monitoring service. For a global audience, this means you can:
- ì§ìë³ ë°ìŽí° ìžë¶í: ë€ë¥ž ì§ëЬì ìì¹ì ìë ì¬ì©ìì ê²ì ì ì ì§ì° ìê°ìŽ ìŽë»ê² ë€ë¥žì§ ë¶ì.
- ë³ëª© íì ìë³: í¹ì ì§ì ëë ë€ížìí¬ ì¡°ê±ŽìŽ ì€ìí ìì ìì ë늰 ì±ë¥ì ì ë°íëì§ ì¬ë¶ íì .
- ìê° ê²œê³Œì ë°ë¥ž ê°ì ì¬í ì¶ì : ì¬ì©ì ì§ì ì§íì ëí ìµì íì ìí¥ì ìž¡ì .
ê³ êž ìë늬ì€ë¥Œ ìí PerformanceObserver íì©
The `PerformanceObserver` API offers even more power than just manual marks and measures. It allows you to observe specific types of performance entries as they happen, enabling more automated and comprehensive monitoring.
ì¬ì©ì ì§ì ë§í¬ ë° ìž¡ì êŽì°°
ì¬ì©ì ì§ì ë§í¬ ë° ìž¡ì ì ìì íêž° ìíŽ `PerformanceObserver`륌 ìì±í ì ììµëë€:
const observer = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.entryType === 'measure') {
console.log(`Observed custom measure: ${entry.name} - ${entry.duration}ms`);
// Send this data to your analytics platform
sendToAnalytics({ name: entry.name, duration: entry.duration });
}
}
});
observer.observe({ type: 'measure' });
ìŽ ìµì ë²ë ìë¡ìŽ ì±ë¥ ìž¡ì ìŽ ìì±ë ëë§ë€ ìëìŒë¡ ížëŠ¬ê±°ëìŽ, ìëìŒë¡ íŽë§íì§ ìê³ ë ì¬ì©ì ì§ì ì§í륌 ì²ëЬíê³ ë³Žê³ í ì ììµëë€.
ì¹ ë°ìŽí곌ì íµí©
ì¬ì©ì ì§ì íìëŒìžìŽ ì í늬ìŒìŽì ë³ ì구 ì¬íì íŽê²°íì§ë§, ê°ì¥ í° ìœí ìž ful íìžíž(LCP), 첫 ë²ì§ž ì ë ¥ ì§ì°(FID), ëì ë ìŽìì ìŽë(CLS)곌 ê°ì í늜ë ì¹ ë°ìŽí ì§í륌 볎ìí ì ììµëë€. ì륌 ë€ìŽ, LCP ììê° ìì í ìíž ìì© ê°ë¥íŽì§ë ë° ê±žëŠ¬ë ìê°ì ìž¡ì íì¬ ì€ìí ë¡ë© ëšê³ì ëí ë ìžë¶ì ìž ë³Žêž°ë¥Œ ì ê³µí ì ììµëë€.
ì±ë¥ 몚ëí°ë§ì ìí êžë¡ë² ê³ ë € ì¬í
êžë¡ë² ì¬ì©ì륌 ìí ì±ë¥ 몚ëí°ë§ì ë°°í¬í ë ì¬ë¬ ììê° ì€ìí©ëë€.
- ì¬ì©ìì ì§ëЬì ë¶í¬: ì¬ì©ìê° ìŽëì ìì¹íëì§ ìŽíŽí©ëë€. ìží°ë· ìžíëŒê° ë ê°ë°ë ì§ì(ì: ìí늬칎 ìŒë¶, ëëšììì)ì ìë¹í ì¬ì©ì êž°ë°ì ë¶ë¯žë ì ëœ ì¬ì©ìë³Žë€ ë€ë¥ž ì±ë¥ í¹ì±ì 겜íí ì ììµëë€.
- ë€ížìí¬ ì¡°ê±Ž: ì±ë¥ì ë€ížìí¬ ì§ì° ìê°, ëìí ë° íší· ìì€ì ë°ëŒ í¬ê² ë¬ëŒì§ ì ììµëë€. ì¬ì©ì ì§ì ì§íë ìŽìì ìŒë¡ë ë€ìí ì뮬ë ìŽì ëë ì€ì ë€ížìí¬ ì¡°ê±Žììì ì±ë¥ì ë°ìíŽìŒ í©ëë€.
- ì¥ì¹ ë€ìì±: ì ìžê³ ì¬ì©ìë ê³ êž ë°ì€í¬í±ë¶í° ì ì ë ¥ íŽëí°ì ìŽë¥Žêž°ê¹ì§ ë€ìí ì¥ì¹ìì ì¹ ì í늬ìŒìŽì ì ì¡ìžì€í©ëë€. ìŽë¬í ì¥ì¹ ê°ì ì±ë¥ì í¬ê² ë€ë¥Œ ì ììµëë€.
- ìê°ë: ì±ë¥ ë°ìŽí°ë¥Œ ë¶ìí ë ìê°ë ì°šìŽì ì ìíììì€. íŒí¬ ì¬ì© ìê°ì ì§ìë³ë¡ ë€ë¥Žë©°, ìŽë¬í êž°ê° ëì ì±ë¥ 묞ì ê° ë ë§ìŽ ë°ìí ì ììµëë€.
- ë°ìŽí° 볌륚 ë° ë¹ì©: ë°©ëí êžë¡ë² ì¬ì©ì êž°ë°ìì ììží ì±ë¥ ë°ìŽí°ë¥Œ ìì§íë ê²ì ìë¹í ížëíœ ë° ì ì¥ ë¹ì©ì ë°ììí¬ ì ììµëë€. íšìšì ìž ë°ìŽí° ìì§ ë° ì§ê³ ì ëµì 구ííììì€.
êžë¡ë² ì±ë¥ ë¶ìì ìí ë구 ë° ìë¹ì€
íë°ížìë ìœëìì ì§ì ì¬ì©ì ì§ì ì±ë¥ ì¶ì ì 구íí ì ìì§ë§, í¹ì ë구륌 íì©í멎 íë¡ìžì€ë¥Œ í¬ê² ê°ìíí ì ììµëë€.
- ëžëŒì°ì ê°ë°ì ë구: Chrome DevTools, Firefox Developer Edition ë° Safari Web Inspectorì ì±ë¥ íì ì€ìê°ìŒë¡ ì±ë¥ì ëë²ê¹ íê³ ìŽíŽíë ë° ë§€ì° ì€ìí©ëë€. ì¬êž°ìì ì¬ì©ì ì§ì ë§í¬ì ìž¡ì ì 볌 ì ììµëë€.
- ì€ì¬ì©ì 몚ëí°ë§(RUM) ìë¹ì€: Sentry, New Relic, Datadog, Dynatrace ë° Google Analytics(ì±ë¥ ë³Žê³ í¬íš)ì ê°ì ìë¹ì€ë ì¬ì©ì ì§ì ì±ë¥ ì§í륌 ìì§íê³ ëì볎ë, ê²œê³ ë° ë¶ì êž°ë¥ì ì ê³µí ì ììµëë€. ìŽë¬í ë구ë ì¢ ì¢ ì§ëЬì ìžë¶í ë° êž°í ì€ìí êžë¡ë² íµì°°ë ¥ì ì ê³µí©ëë€.
- í©ì± 몚ëí°ë§ ë구: WebPageTest, GTmetrix ë° Pingdom곌 ê°ì ë구륌 ì¬ì©í멎 ì ìžê³ ì¬ë¬ ìì¹ìì ì¬ì©ì 방묞ì ì뮬ë ìŽì íê³ ë€ìí ë€ížìí¬ ì¡°ê±Žìì ì í늬ìŒìŽì ì±ë¥ì í ì€íží ì ììµëë€. RUMì ìëì§ë§, êž°ì€ ì±ë¥ í ì€íž ë° ì§ì 묞ì ìë³ì íìí©ëë€.
ì¬ì©ì ì§ì íìëŒìž 구íì ìí ëªšë² ì¬ë¡
ì¬ì©ì ì§ì ì±ë¥ íìëŒìž 구íìŽ íšê³Œì ìŽê³ ì ì§ ë³Žì ê°ë¥íëë¡ íë €ë©Ž ë€ì ëªšë² ì¬ë¡ë¥Œ ê³ ë €íììì€.
- ì ë³ì ìŒë¡ ì¬ì©: 몚ë DOM ì ë°ìŽížë¥Œ ë§í¬íì§ ë§ììì€. ì¬ì©ì 겜í ë° ë¹ìŠëì€ ëª©íì ì§ì ì ìž ìí¥ì 믞ì¹ë ì€ìí ì¬ì©ì ìíž ìì© ë° ìì ì ì§ì€íììì€.
- ì€ëª ì ìž ìŽëŠ ì¬ì©: ë§í¬ì ìž¡ì ì ëíŽ ëª ííê³ ìŒêŽë ìŽëŠì ì ííììì€. ìŽë ê² í멎 ëì€ì ë°ìŽí°ë¥Œ ë ìœê² ìŽíŽíê³ ë¶ìí ì ììµëë€. `app_` ëë `custom_` ì ëì¬ë¥Œ ë¶ìŽë©Ž ëžëŒì°ì ë€ìŽí°ëž í목곌 구ë³íë ë° ëììŽ ë ì ììµëë€.
- ë¹ ë¥ž ìíž ìì© ì²ëЬ: (ê²ì ììì ì ë ¥íë ê²ê³Œ ê°ìŽ) ë¹ ë¥Žê² ì°ìì ìŒë¡ ë°ìí ì ìë ìì ì 겜ì°, ì±ë¥ íìëŒìžê³Œ ë³Žê³ ìì€í ì ìëíì§ ìëë¡ ë§í¬ì ëí ëë°ìŽì± ëë ì€ë¡íë§ì 구ííììì€. ëë ê° ê°ë³ ìì ì ê³ ì ìë³ì륌 ì¬ì©íììì€.
- ì¢ ëš ê° ìž¡ì : ì€ìí ìì ì ëíŽ ììë¶í° ìë£ê¹ì§ì ì 첎 ì¬ì©ì ì¬ì ì ìž¡ì íë ê²ì 목íë¡ íììì€. ëšì§ ê°ë³ ë¶ë¶ë§ ìž¡ì íë ê²ìŽ ìëëë€.
- ì¬ì©ì íë곌 ì°êŽ: ê°ë¥í í ì±ë¥ ì§í륌 ì€ì ì¬ì©ì íë ë° ìŽë²€ížì ì°ê²°íì¬ ì±ë¥ìŽ ì¬ì©ì ì°žì¬ ë° ì íì 믞ì¹ë ìí¥ì ìŽíŽíììì€.
- ì êž°ì ìŒë¡ ê²í ë° ê°ì : ì í늬ìŒìŽì ì구 ì¬íì ì§íí©ëë€. ì¬ì©ì ì§ì ì§íê° ì¬ì í ë¹ìŠëì€ ëª©í ë° ì¬ì©ì 겜í 목íì ìŒì¹íëì§ ì êž°ì ìŒë¡ ê²í íììì€.
- ì€ë¥ ì²ëЬ ê³ ë €: ì±ë¥ ë§í¹ ë° ìž¡ì ìœë 죌ë³ì try-catch ëžë¡ì 구ííì¬ ì€ë¥ê° ì í늬ìŒìŽì ì ì¶©ëìí€ê±°ë ì¬ì©ì íëŠì ë°©íŽíë ê²ì ë°©ì§íììì€.
- ê°ìž ì 볎 볎íž: ì¬ì©ì ê°ìž ì 볎 볎ížì ì ìíììì€. 믌ê°í ì¬ì©ì ë°ìŽí°ë¥Œ ë§í¹íê±°ë ìž¡ì íì§ ë§ììì€.
Ʞ볞 ì§í륌 ëìŽì ê³ êž ì¬ì©ì ì§ì
ì¬ì©ì ì§ì íìëŒìžì êž°ë¥ì ê°ëší ì§ì ìê° ìž¡ì ê·ž ìŽììŒë¡ íì¥ë©ëë€. ë€ìì ìíí ì ììµëë€.
- í¹ì ìì ëŽ ëŠ¬ìì€ ë¡ë© ìž¡ì : `performance.getEntriesByType('resource')`ë 몚ë 늬ìì€ íìŽë°ì ì ê³µíì§ë§, ë§í¬ë¥Œ ì¬ì©íì¬ í¹ì 늬ìì€ ë¡ë(ì: ì í ìºë¬ì ì ìŽë¯žì§)륌 ìºë¬ì ìíž ìì© ìì곌 ì°êŽìí¬ ì ììµëë€.
- í¹ì êµ¬ì± ììì ë ëë§ ì±ë¥ ì¶ì : êµ¬ì± ìì ë ëë§ ì£Œêž°ì ìì곌 ëì ë§í¹íšìŒë¡ìš ê°ë³ UI ììì ì±ë¥ì ëí íµì°°ë ¥ì ì»ì ì ììµëë€.
- ë¹ëêž° ìì ìë£ ëªšëí°ë§: ì¥êž° ì€í 백귞ëŒìŽë ìì ì 겜ì°, ìì ë° ìë£ë¥Œ ë§í¬íì¬ ìžì§ë ì±ë¥ì ë¶ì ì ìž ìí¥ì 믞ì¹ì§ ìëë¡ í©ëë€.
ê²°ë¡ : ì¬ì©ì ì§ì ì±ë¥ íµì°°ë ¥ìŒë¡ êžë¡ë² ì¬ì©ì 겜í ê°í
íë°ížìë ì±ë¥ ìµì ë² APIë ì¬ì©ì ì§ì íìëŒìžì ì ìíê³ ìž¡ì íë êž°ë¥ì íµíŽ ì¬ì©ì 겜íì ëí ìžë¶ì ìŽê³ ì í늬ìŒìŽì ë³ íµì°°ë ¥ì ì»ì ì ìë ì¬ì€í êž°í륌 ì ê³µí©ëë€. ìŒë°ì ìž ë¡ë ìê°ì ëìŽ ì¹ ì í늬ìŒìŽì ì ì±ê³µì ì ìíë ì€ìí ìíž ìì©ì ì§ì€íšìŒë¡ìš ì±ë¥ ë³ëª© íìì ì¬ì ì ìë³íê³ íŽê²°í ì ììµëë€.
êžë¡ë² ì¬ì©ììê²ë ìŽë¬í ì ê·Œ ë°©ììŽ íšì¬ ë ì€ìí©ëë€. ì§ì, ë€ížìí¬ ì¡°ê±Ž ë° ì¥ì¹ì ë°ëŒ ì±ë¥ìŽ ìŽë»ê² ë€ë¥žì§ ìŽíŽí멎 ìµì í륌 ì¡°ì íê³ ì ìžê³ ìŽëì ìë 몚ë ì¬ì©ììê² ìŒêŽëê² ì°ìí 겜íì ì ê³µí ì ììµëë€. ì¬ì©ì ì§ì ì±ë¥ ì§íì í¬ìíë ê²ì ì¬ì©ì ë§ì¡±ë, ì íìš, ê¶ê·¹ì ìŒë¡ ì¹ ì í늬ìŒìŽì ì êžë¡ë² ì±ê³µì ëí í¬ìì ëë€.
ê°ì¥ ì€ìí ì¬ì©ì ì¬ì ì ìë³íê³ , 목í ë§í¬ì ìž¡ì ì 구ííë©°, Performance Observer APIì íì íì©íì¬ ë ëì ì±ë¥, ì¬ì©ì ì€ì¬ì ìŽë©° êžë¡ë² ìí¥ë ¥ì ê°ì§ ì¹ ì í늬ìŒìŽì ì 구ì¶íìžì.